一个普通技术宅的点点滴滴

0%

十分钟用Python创建一个Echo Server

近日想玩一下网络编程方面,但是实在不想用C去写笨重的代码,于是就使用python写了一个简单的TCP Echo Server。代码很少,标题虽然写了十分钟,但是我自己磕磕碰碰还是折腾了一天(标题党了)


什么是Echo Server

Echo Server一般是运行在7端口的一项服务,其一大特点就是会返回从客户端接收到的消息。(通俗来说就是复读机)

Echo Server能用来做什么

Echo Server是最容易实现的网络服务之一,可以用来学习Socket编程的一些基本知识,还可以用来检测客户端与服务器之间的连通性,丢包率,连接速度和传输速度。


实现思路

一开始我觉得应该挺容易的,快速的从网上找到了一些相关的代码,采用Ctrl C V大法,但是却发现有很多问题,最终还是自己动手才写出一个像样的东西。

首先第一步,我们得监听一个端口,调用python的socket模块,让其绑定在一个端口,监听TCP连接。

1
2
3
#使用IPV4和TCP连接,监听端口程序
tcpSocket = socket.Socket(socket.AF_INET, socket.SOCK_STREAM)
tcpSocket.bind((HOST, PORT))

第二步,我们检测是否有客户端连接上,如果连接上了,就将对这个客户的处理逻辑单独放到一个线程里跑(这是坑最多的一部,看了网上很多代码,要么就是直接一个线程,无法处理多客户,要么就是所有客户端共用一个处理线程,当数据量较大时就会出现问题)

1
2
3
4
while True:
clientSocket, clientAddr = tcpSocket.accept()
t = threading.Thread(target = handle, args = (clientSocket, clientAddr), daemon = True)
t.start()

最后我们只要在线程处理逻辑中,编写相关的回显逻辑,就可以了。

1
2
3
4
5
6
while True:
data = clientSocket.recv(BUFSIZE)
if not data:
break
clientSocket.send(data)
clientSocket.close()

当然上面为了演示,对实际代码做了很多精简,完整的代码在下面(需要科学上网):

服务端
客户端
(客户端为一个类似nc的小程序)